
import { ExceptionFilter, Catch, ArgumentsHost, HttpException } from '@nestjs/common'

import { Request, Response } from 'express'


/* 
 创建一个异常过滤器，它负责捕获作为HttpException类实例的异常，并为它们设置自定义响应逻辑。
 为此，我们需要访问底层平台 Request和 Response。
 我们将访问Request对象，以便提取原始 url并将其包含在日志信息中。
 我们将使用 Response.json()方法，使用 Response对象直接控制发送的响应
*/
@Catch(HttpException)
export class HttpFilter implements ExceptionFilter {
    catch(exception: HttpException, host: ArgumentsHost) {
        const ctx = host.switchToHttp()
        const request = ctx.getRequest<Request>()
        const response = ctx.getResponse<Response>()

        const status = exception.getStatus()

        response.status(status).json({
            data: exception.message,
            time: new Date().getTime(),
            success: false,
            path: request.url,
            status
        })
    }
}